package com.flyu.myThread.Callable;

import java.util.concurrent.*;

/*
创建线程方式三：Callable接口

步骤：
    1. 实现Callable接口
    2. 重写call()方法
    3. 创建服务
    4. 提交
    5. 关闭服务

优点：
    1. 可以定义返回值
    2. 可以抛出异常
 */
public class TestCallable implements Callable<Boolean> {

    private String name;

    public TestCallable(String name){
        this.name = name;
    }

    // 重写call()方法
    @Override
    public Boolean call() throws Exception {
        System.out.println("正在修炼的人是--"+name);
        return true;
    }

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        TestCallable t1 = new TestCallable("萧峰");
        TestCallable t2 = new TestCallable("虚竹");
        TestCallable t3 = new TestCallable("段誉");

        // 创建执行服务，定义一个线程池
        ExecutorService ser = Executors.newFixedThreadPool(3);

        // 提交
        Future<Boolean> r1 = ser.submit(t1);
        Future<Boolean> r2 = ser.submit(t2);
        Future<Boolean> r3 = ser.submit(t3);

        // 获取结果
        boolean rs1 = r1.get();
        boolean rs2 = r2.get();
        boolean rs3 = r3.get();

        // 打印
        System.out.println(rs1);
        System.out.println(rs2);
        System.out.println(rs3);

        // 关闭服务
        ser.shutdown();
    }


}
